package advanced.io;

import java.io.*;

/**
 * 字节数组的 流读写(它不能直接写出到文件或者从文件读入)
 * 源头数据是:内存数据 或者 网络数据!!!
 * <p>
 * 1. 字节数据流可以不用关, 由java gc控制
 * 2. 尽量操作的量小,避免内存的过多占用
 */
public class L_ByteArrayInputStream {
    public static void main(String[] args) {
        byteArrayInput();
        byteArrayOutput();
    }

    public static void byteArrayInput() {
        byte[] src = "talk is cheap show me the code".getBytes();

        InputStream is = null;
        //不用经过操作系统的文件管理
        try {
            is = new ByteArrayInputStream(src);
            byte[] flush = new byte[64];//缓冲容器
            int len = -1;
            while ((len = is.read(flush)) != -1) {
                String str = new String(flush, 0, len);
                System.out.println(str);

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void byteArrayOutput() {
        String msg = "talk is cheap show me the code";

        ByteArrayOutputStream os = null;
        //不用经过操作系统的文件管理
        try {
            os = new ByteArrayOutputStream();
            byte[] flush = new byte[64];//缓冲容器
            byte[] msgBytes = msg.getBytes();
            os.write(msgBytes);
            os.flush();
            //获取数据
            byte[] dest = os.toByteArray();//拿到输出流中的数据
            System.out.println(dest.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
